﻿using System;
using System.Collections.Generic;
using SoftwareConsulting.BI11.Studio.InternalServices;

namespace SoftwareConsulting.BI11.NumericalMethods.Classification
{    
    /// <summary>
    /// Интерфейс классификации
    /// </summary>
    public interface IClassificator
    {
        /// <summary>
        /// Возвращает флаг проинициализированной классификации
        /// </summary>
        bool Initialized { get; }
        /// <summary>
        /// Откатывает примеры к последней точке отката
        /// </summary>
        void RollbackExamples();
        /// <summary>
        /// Устанавливает точку отката примеров
        /// </summary>
        void SetExamplesRollbackPoint();
        /// <summary>
        /// Загружает пример
        /// </summary>
        /// <param name="attributes">значения признаков</param>
        /// <param name="class_">класс</param>
        /// <remarks>true - пример загружен, false - нет (потому что уже такой есть)</remarks>
        bool LoadExample(double[] attributes, int class_);                       
        /// <summary>
        /// Классифицирует объект
        /// </summary>
        /// <param name="attributes"></param>
        void RecognizeClass(double[] attributes);
        /// <summary>
        /// Возвращает решение - класс объекта
        /// </summary>
        /// <returns></returns>
        int GetSolutionClass();        
        /// <summary>
        /// Возвращает решение - массив уровня соответствий объекта классам (чем больше значение - тем больше соответствует)
        /// </summary>
        /// <returns></returns>
        int[] GetSolutionEstimatedClasses();
        /// <summary>
        /// Устанавливает дополнительную информацию для каждого из признаков
        /// </summary>
        /// <param name="infos"></param>
        void SetInfos(double[] infos);
    }
}
